import base64
import json
import pickle

from django_redis import get_redis_connection


def mereg_cookie_to_redis(request,user,response):

    # 第二遍

    # 1.获取cookie中的carts数据，并进行判断
    data = request.COOKIES.get()
    #     如果有则解码
    if data is not None:
        carts=pickle.loads(base64.b64decode(data))
        #     如果没有不需要进行合并
        # 2.读取redis数据
        redis_conn = get_redis_connection('carts')
        sku_id_count = redis_conn.mgetall('carts_%s'%user.id)
        selected_sku_id = redis_conn.smembers('selected_%s'%user.id)
        redis_hash={}          #  {sku_id :  count}
        for sku_id,count in sku_id_count.items():
            redis_hash[int(sku_id)]=int(count)
        # 3.初始化一个空的字典，这个字典用于存放合并过程中的hash数据
        new_hash_dict={}
        selected_ids=[]
        unselected_ids=[]
        #     初始化两个空列表，一个接收选中的id，一个接收未选中的id
        # 4.对cookie数据进行遍历
        for sku_id,count_selected in carts.items():
            #     5.判断我们的cookie的id是否在redis数据中。
            # 如果cookie的id在redis里面,那么就要改变count,如果没有在redisi,那么就得添加,所以这两步一样的
            if sku_id in redis_hash:
                new_hash_dict[int(sku_id)]={'count':count_selected['count']}
            else:
                new_hash_dict[int(sku_id)]={'count':count_selected['count']}

            if count_selected['selected']:
                selected_ids.append(sku_id)
            else:
                unselected_ids.append(sku_id)
        #     6.根据选中，未选中的状态，添加到列表中。
        # 7.将三个数据更新到redis中。
        if len(carts) > 0:
            redis_conn.hmset('carts_%s' % user.id, new_hash_dict)
            # selected_ids 选中的id进行添加
        if len(selected_ids) > 0:
            redis_conn.sadd('selected_%s' % user.id, *selected_ids)
            # unselected_ids 未选中的id进行删除
        if len(unselected_ids) > 0:
            redis_conn.srem('selected_%s' % user.id, *unselected_ids)
        response.delete_cookie('carts')
        return response

    return response
    # # 1.获取cookie中的carts数据，并进行判断
    # data = request.COOKIES.get('carts')
    # # 如果有则解码
    # if data is not None:
    #     carts=pickle.loads(base64.b64decode(data))
    #
    #     # 2.读取redis数据
    #     redis_conn = get_redis_connection('carts')
    #     sku_id_counts=redis_conn.hgetall('carts_%s'%user.id)
    #         # skuid_count    {sku_id:count,sku_id:count}
    #     redis_hash={}
    #     for sku_id,count in sku_id_counts.items():
    #         redis_hash[int(sku_id)]=int(count)
    #     # 3.初始化一个空的字典，这个字典用于存放合并过程中的hash数据
    #     # 初始化两个空列表，一个接收选中的id，一个接收未选中的id
    #     new_hash_dict={}
    #     selected_ids=[]
    #     unselected_ids=[]
    #     # 4.对cookie数据进行遍历
    #     for sku_id,count_selected in carts.items():
    #         # 5.判断我们的cookie的id是否在redis数据中。
    #         if sku_id in redis_hash:
    #             new_hash_dict[int(sku_id)] = int(count_selected['count'])
    #         else:
    #             new_hash_dict[int(sku_id)]=int(count_selected['count'])
    #         # 6.根据选中，未选中的状态，添加到列表中。
    #         if count_selected['selected']:
    #             selected_ids.append(sku_id)
    #         else:
    #             unselected_ids.append(sku_id)
    #
    #     #  7.将三个数据更新到redis中。
    #     if len(carts) > 0:
    #         redis_conn.hmset('carts_%s' % user.id, new_hash_dict)
    #         # selected_ids 选中的id进行添加
    #     if len(selected_ids) > 0:
    #         redis_conn.sadd('selected_%s' % user.id, *selected_ids)
    #         # unselected_ids 未选中的id进行删除
    #     if len(unselected_ids) > 0:
    #         redis_conn.srem('selected_%s' % user.id, *unselected_ids)
    #
    #     response.delete_cookie('carts')
    #     return response
    #
    # # 如果没有不需要进行合并
    # return response
    # 第一遍